package com.dreamoo.common.result;

import lombok.Getter;

/**
 * 返回状态码枚举类
 * 
 * @author dreamoo
 */
@Getter
public enum ResultCode {
    
    /**
     * 操作成功
     */
    SUCCESS(200, "操作成功"),
    
    /**
     * 操作失败
     */
    FAILURE(500, "操作失败"),
    
    /**
     * 参数检验失败
     */
    VALIDATE_FAILED(400, "参数检验失败"),
    
    /**
     * 暂未登录或登录已过期
     */
    UNAUTHORIZED(401, "暂未登录或token已经过期"),
    
    /**
     * 没有相关权限
     */
    FORBIDDEN(403, "没有相关权限"),
    
    /**
     * 资源不存在
     */
    NOT_FOUND(404, "资源不存在"),
    
    /**
     * 服务器内部错误
     */
    INTERNAL_SERVER_ERROR(500, "服务器内部错误"),
    
    /**
     * 不支持的请求方法
     */
    METHOD_NOT_ALLOWED(405, "不支持的请求方法"),
    
    /**
     * 参数类型错误
     */
    PARAM_TYPE_ERROR(400, "参数类型错误"),
    
    /**
     * 参数缺失
     */
    PARAM_MISS(400, "参数缺失"),
    
    /**
     * 参数值非法
     */
    PARAM_INVALID(400, "参数值非法"),
    
    /**
     * 流量超限
     */
    FLOW_LIMITING(429, "流量超限"),
    
    /**
     * 系统维护中
     */
    SYSTEM_MAINTAINING(503, "系统维护中"),
    
    /**
     * 重复操作
     */
    DUPLICATE_OPERATION(409, "重复操作"),
    
    /**
     * 上游服务错误
     */
    UPSTREAM_SERVICE_ERROR(504, "上游服务错误"),
    
    /**
     * 梦境不存在
     */
    DREAM_NOT_FOUND(404, "梦境不存在"),
    
    /**
     * 无权限访问梦境
     */
    DREAM_ACCESS_DENIED(403, "无权限访问此梦境"),
    
    /**
     * AI服务异常
     */
    AI_SERVICE_ERROR(500, "AI服务异常，请稍后重试"),
    
    /**
     * 图片生成失败
     */
    IMAGE_GENERATION_FAILED(500, "图片生成失败"),
    
    /**
     * 用户不存在
     */
    USER_NOT_FOUND(404, "用户不存在"),
    
    /**
     * 睡眠数据不存在
     */
    SLEEP_DATA_NOT_FOUND(404, "睡眠数据不存在"),
    
    /**
     * 积分不足
     */
    INSUFFICIENT_POINTS(403, "积分不足"),
    
    /**
     * 非会员限制
     */
    VIP_REQUIRED(403, "此功能需要会员才能使用"),
    /**
     * 线程池不存在
     */
    THREAD_POOL_NOT_FOUND(403, "线程池不存在"),
    TOKEN_EXPIRE(403, "Token过期");

    private final Integer code;
    
    private final String message;
    
    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }
    
    public String getMessage() {
        return message;
    }
} 